1. Technical Field
The present invention relates to computer system verification and more particularly to verification of concurrent programs, which exploit parameterized qualities of computer systems comprised of many copies of the same hardware or software component.
2. Description of the Related Art
Computer verification is needed to ensure that a computer system operates properly and that the results obtained are trustworthy. One form of verification is testing. In testing, the actual behavior of a system is examined on a set on inputs and matched against an expected result. Due to a large or infinite number of possible inputs, it becomes impossible to confirm that a system behaves correctly in all circumstances.
Verification tries to address these issues. Verification provides a mathematical or model basis for simulating the system behavior. A model and its intended behavior are defined. A machine is usually modeled as a system whose state evolves over time, the model includes a specification of the state space and how the system can traverse it. Temporal logic has been shown to be useful in expressing behavior of reactive systems. The model-checking approach to verification includes taking the mathematical model of the system under consideration and checking the validity of a temporal logic formula within the model.
A primary problem faced by all methods is known as state explosion. State explosion means that the state space of the system under consideration grows rapidly (e.g., exponentially) with the amount of memory used (e.g., registers, or program variable, pointers, etc.). This limits the verification methods.
Multi-threading is a standard way of exploiting parallelism among different components of a computer system. As a result, the use of concurrent multi-threaded programs is becoming pervasive. Examples include operating systems, databases, embedded systems (cell phones, multimedia consumer products) etc. Since verification typically does not scale for large scale concurrent programs, there is a deep interest in leveraging static analysis techniques like inter-procedural dataflow analysis for debugging multi-threaded programs. While inter-procedural dataflow analysis has shown to be a very effective technique for finding bugs for sequential programs, there has been very little work on extending such dataflow analyses to the concurrent domain.